home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Snippets / DirectoryPopup 1.0 / □□□DPSample Source / SimpleAppWindows.c < prev    next >
Text File  |  1996-06-03  |  4KB  |  179 lines

  1. /*
  2.  *    Project:        SimpleApp
  3.  *
  4.  *    Filename:         SimpleAppWindows.c
  5.  *
  6.  *    Author:         Marco Piovanelli
  7.  *
  8.  *    Revision History:
  9.  *
  10.  *            1996.05.24                MP        created this file
  11.  *
  12.  */
  13.  
  14. #include "SimpleApp.h"
  15.  
  16. #ifndef __ALIASES__
  17. #include <Aliases.h>
  18. #endif
  19.  
  20. #include "DirectoryPopup.h"
  21. #include "FinderObjects.h"
  22.  
  23. void CalcSizeBox ( WindowRef macWindow, Rect * iconRect ) ;
  24. void DrawSizeBox ( WindowRef macWindow, Boolean validate = false ) ;
  25.  
  26. OSErr CreateWindow ( const FSSpec * fileSpec )
  27. {
  28.     WindowRef macWindow ;
  29.     AliasHandle alias = nil ;
  30.  
  31.     macWindow = GetNewCWindow ( kWindowTemplateID, nil, ( WindowRef ) -1L ) ;
  32.     if ( macWindow == nil )
  33.     {
  34.         return memFullErr ;
  35.     }
  36.     
  37.     if ( fileSpec != nil )
  38.     {
  39.         SetWTitle ( macWindow, fileSpec -> name ) ;
  40.         if ( ( NewAlias ( nil, fileSpec, & alias ) == noErr ) &&
  41.              ( alias != nil ) )
  42.         {
  43.             SetWRefCon ( macWindow, ( SInt32 ) alias ) ;
  44.         }
  45.     }
  46.  
  47.     ShowWindow ( macWindow ) ;
  48.  
  49.     return noErr ;
  50. }
  51.  
  52. OSErr DestroyWindow ( WindowRef macWindow )
  53. {
  54.     AliasHandle alias = ( AliasHandle ) GetWRefCon ( macWindow ) ;
  55.     
  56.     if ( alias != nil )
  57.     {
  58.         DisposeHandle ( ( Handle ) alias ) ;
  59.         SetWRefCon ( macWindow, 0 ) ;
  60.     }
  61.     
  62.     DisposeWindow ( macWindow ) ;
  63.     return noErr ;
  64. }
  65.  
  66. void DoGoAway ( WindowRef macWindow, const EventRecord & event )
  67. {
  68.     DestroyWindow ( macWindow ) ;
  69. }
  70.  
  71. void DoContent ( WindowRef macWindow, Point hitPt, const EventRecord & event )
  72. {
  73. }
  74.  
  75. void DoDrag ( WindowRef macWindow, Point hitPt, const EventRecord & event )
  76. {
  77.     if ( event . modifiers & cmdKey )
  78.     {
  79.         AliasHandle alias ;
  80.         FSSpec fileSpec ;
  81.         Boolean wasChanged = false ;
  82.  
  83.         if ( ( ( alias = ( AliasHandle ) GetWRefCon ( macWindow ) ) != nil ) &&
  84.              ( ResolveAlias ( nil, alias, & fileSpec, & wasChanged ) == noErr ) )
  85.         {
  86.             if ( wasChanged )
  87.             {
  88.                 SetWTitle ( macWindow, fileSpec . name ) ;
  89.             }
  90.             if ( TrackDirectoryPopup ( & fileSpec, macWindow, hitPt ) )
  91.             {
  92.                 OpenFinderObject ( & fileSpec ) ;
  93.                 return ;
  94.             }
  95.         }
  96.     }
  97.  
  98.     Rect bounds = ( * GetGrayRgn ( ) ) -> rgnBBox ;
  99.     DragWindow ( macWindow, hitPt, & bounds ) ;
  100. }
  101.  
  102. void DoZoom ( WindowRef macWindow, SInt16 partCode, const EventRecord & event )
  103. {
  104. }
  105.  
  106. void DoGrow ( WindowRef macWindow, Point hitPt, const EventRecord & event )
  107. {
  108.     const Rect growRect = { 80, 224, 32000, 32000 } ;
  109.     SInt32 growResult ;
  110.  
  111.     if ( ( growResult = GrowWindow ( macWindow, hitPt, & growRect ) ) != 0 )
  112.     {
  113.         Rect iconRect ;
  114.  
  115.         SetPortWindowPort ( macWindow ) ;
  116.         CalcSizeBox ( macWindow, & iconRect ) ;
  117.         EraseRect ( & iconRect ) ;
  118.         SizeWindow ( macWindow, SInt16 ( growResult ), SInt16 ( growResult >> 16 ), false ) ;
  119.         DrawSizeBox ( macWindow, true ) ;
  120.     }
  121. }
  122.  
  123. void CalcSizeBox ( WindowRef macWindow, Rect * iconRect )
  124. {
  125.     Rect portRect = GetWindowPort ( macWindow ) -> portRect ;
  126.  
  127.     iconRect -> top = portRect . bottom - 15 ;
  128.     iconRect -> left = portRect . right - 15 ;
  129.     iconRect -> bottom = portRect . bottom ;
  130.     iconRect -> right = portRect . right ;
  131. }
  132.  
  133. void DrawSizeBox ( WindowRef macWindow, Boolean validate )
  134. {
  135.     GrafPtr savePort ;
  136.     RgnHandle saveClip ;
  137.     Rect r ;
  138.  
  139.     // set up the port
  140.     GetPort ( &savePort ) ;
  141.     SetPortWindowPort ( macWindow ) ;
  142.  
  143.     // save the clip region
  144.     saveClip = NewRgn ( ) ;
  145.     GetClip ( saveClip ) ;
  146.  
  147.     // calculate the grow icon rect
  148.     CalcSizeBox ( macWindow, & r ) ;
  149.  
  150.     // set clip region to grow icon rect
  151.     ClipRect ( & r ) ;
  152.  
  153.     // call DrawGrowIcon
  154.     DrawGrowIcon ( macWindow ) ;
  155.  
  156.     // if validate is true, remove the grow icon rect from the update region
  157.     if ( validate )
  158.     {
  159.         ValidRect ( & r ) ;
  160.     }
  161.  
  162.     // restore old clip region
  163.     SetClip ( saveClip ) ;
  164.     DisposeRgn ( saveClip ) ;
  165.  
  166.     // restore old port
  167.     SetPort ( savePort ) ;
  168. }
  169.  
  170. void DoUpdate ( WindowRef macWindow, RgnHandle invalidRgn )
  171. {
  172.     DrawSizeBox ( macWindow ) ;
  173. }
  174.  
  175. void DoActivate ( WindowRef macWindow, Boolean isActivating )
  176. {
  177.     DrawSizeBox ( macWindow, true ) ;
  178. }
  179.